package com.yuesystem.common;

import java.sql.SQLIntegrityConstraintViolationException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;


/**
 * 全局异常处理.
 * 不管哪个类上面加了这两个注解，都会被这个全局异常处理.
 */
@ControllerAdvice(annotations = {RestController.class, Controller.class})
@ResponseBody
@Slf4j
public class GlobalExceptionHandler {

  /**
   * 异常处理方法，只要某个Controller出现了下面这种形式的异常，都会被异常处理器处理.
   */
  @ExceptionHandler(SQLIntegrityConstraintViolationException.class)
  public R<String> exceptionHandler(SQLIntegrityConstraintViolationException ex) {
    log.info("执行了GlocalExceptionHandler的SQL...");
    log.error(ex.getMessage());
    if (ex.getMessage().contains("Duplicate entry")) {
      String[] s = ex.getMessage().split(" ");
      String msg = s[2] + "已存在";
      return R.error(msg);
    }
    return R.error("未知错误");
  }

  /**
   * 处理自定义业务异常.
   */
  @ExceptionHandler(CustomException.class)
  public R<String> exceptionHandler(CustomException ex) {
    log.error(ex.getMessage());
    return R.error(ex.getMessage());
  }

}




